/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author hellen
 */
@Entity
@Table(name = "CLIENTE")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c"),
    @NamedQuery(name = "Cliente.findByClienteID", query = "SELECT c FROM Cliente c WHERE c.clienteID = :clienteID"),
    @NamedQuery(name = "Cliente.findByCliNombre", query = "SELECT c FROM Cliente c WHERE c.cliNombre = :cliNombre"),
    @NamedQuery(name = "Cliente.findByCliApellido", query = "SELECT c FROM Cliente c WHERE c.cliApellido = :cliApellido"),
    @NamedQuery(name = "Cliente.findByCliTelefono", query = "SELECT c FROM Cliente c WHERE c.cliTelefono = :cliTelefono"),
    @NamedQuery(name = "Cliente.findByCliPassword", query = "SELECT c FROM Cliente c WHERE c.cliPassword = :cliPassword"),
    @NamedQuery(name = "Cliente.findByCliCredito", query = "SELECT c FROM Cliente c WHERE c.cliCredito = :cliCredito"),
    @NamedQuery(name = "Cliente.findByCliDescuento", query = "SELECT c FROM Cliente c WHERE c.cliDescuento = :cliDescuento")})
public class Cliente implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "ClienteID")
    private Integer clienteID;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "Cli_Nombre")
    private String cliNombre;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "Cli_Apellido")
    private String cliApellido;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "Cli_Telefono")
    private String cliTelefono;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "Cli_Password")
    private String cliPassword;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "Cli_Credito")
    private String cliCredito;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "Cli_Descuento")
    private String cliDescuento;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "regPedClienteID")
    private List<RegistroPedido> registroPedidoList;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "cliente")
    private EstadoPedido estadoPedido;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "docClienteID")
    private List<Documento> documentoList;
    @JoinColumn(name = "Cli_UbicacionID", referencedColumnName = "UbicacionID")
    @ManyToOne(optional = false)
    private Ubicacion cliUbicacionID;
    @JoinColumn(name = "Cli_GrupoUsuarioID", referencedColumnName = "GrupoUsuarioID")
    @ManyToOne(optional = false)
    private GrupoUsuario cliGrupoUsuarioID;
    @JoinColumn(name = "Cli_EstadoUserID", referencedColumnName = "EstadoUserID")
    @ManyToOne(optional = false)
    private EstadoUsuario cliEstadoUserID;
    @JoinColumn(name = "Cli_EmpleadoID", referencedColumnName = "EmpleadoID")
    @ManyToOne(optional = false)
    private Empleado cliEmpleadoID;

    public Cliente() {
    }

    public Cliente(Integer clienteID) {
        this.clienteID = clienteID;
    }

    public Cliente(Integer clienteID, String cliNombre, String cliApellido, String cliTelefono, String cliPassword, String cliCredito, String cliDescuento) {
        this.clienteID = clienteID;
        this.cliNombre = cliNombre;
        this.cliApellido = cliApellido;
        this.cliTelefono = cliTelefono;
        this.cliPassword = cliPassword;
        this.cliCredito = cliCredito;
        this.cliDescuento = cliDescuento;
    }

    public Integer getClienteID() {
        return clienteID;
    }

    public void setClienteID(Integer clienteID) {
        this.clienteID = clienteID;
    }

    public String getCliNombre() {
        return cliNombre;
    }

    public void setCliNombre(String cliNombre) {
        this.cliNombre = cliNombre;
    }

    public String getCliApellido() {
        return cliApellido;
    }

    public void setCliApellido(String cliApellido) {
        this.cliApellido = cliApellido;
    }

    public String getCliTelefono() {
        return cliTelefono;
    }

    public void setCliTelefono(String cliTelefono) {
        this.cliTelefono = cliTelefono;
    }

    public String getCliPassword() {
        return cliPassword;
    }

    public void setCliPassword(String cliPassword) {
        this.cliPassword = cliPassword;
    }

    public String getCliCredito() {
        return cliCredito;
    }

    public void setCliCredito(String cliCredito) {
        this.cliCredito = cliCredito;
    }

    public String getCliDescuento() {
        return cliDescuento;
    }

    public void setCliDescuento(String cliDescuento) {
        this.cliDescuento = cliDescuento;
    }

    @XmlTransient
    public List<RegistroPedido> getRegistroPedidoList() {
        return registroPedidoList;
    }

    public void setRegistroPedidoList(List<RegistroPedido> registroPedidoList) {
        this.registroPedidoList = registroPedidoList;
    }

    public EstadoPedido getEstadoPedido() {
        return estadoPedido;
    }

    public void setEstadoPedido(EstadoPedido estadoPedido) {
        this.estadoPedido = estadoPedido;
    }

    @XmlTransient
    public List<Documento> getDocumentoList() {
        return documentoList;
    }

    public void setDocumentoList(List<Documento> documentoList) {
        this.documentoList = documentoList;
    }

    public Ubicacion getCliUbicacionID() {
        return cliUbicacionID;
    }

    public void setCliUbicacionID(Ubicacion cliUbicacionID) {
        this.cliUbicacionID = cliUbicacionID;
    }

    public GrupoUsuario getCliGrupoUsuarioID() {
        return cliGrupoUsuarioID;
    }

    public void setCliGrupoUsuarioID(GrupoUsuario cliGrupoUsuarioID) {
        this.cliGrupoUsuarioID = cliGrupoUsuarioID;
    }

    public EstadoUsuario getCliEstadoUserID() {
        return cliEstadoUserID;
    }

    public void setCliEstadoUserID(EstadoUsuario cliEstadoUserID) {
        this.cliEstadoUserID = cliEstadoUserID;
    }

    public Empleado getCliEmpleadoID() {
        return cliEmpleadoID;
    }

    public void setCliEmpleadoID(Empleado cliEmpleadoID) {
        this.cliEmpleadoID = cliEmpleadoID;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (clienteID != null ? clienteID.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cliente)) {
            return false;
        }
        Cliente other = (Cliente) object;
        if ((this.clienteID == null && other.clienteID != null) || (this.clienteID != null && !this.clienteID.equals(other.clienteID))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "persistencia.Cliente[ clienteID=" + clienteID + " ]";
    }
    
}
